// ajax库,引入数据类型;
import axios,{InternalAxiosRequestConfig} from 'axios'
import useUserStore from '../store/useUserStore';

const Axios = axios.create({
    // pc 版
    baseURL:'/apis'
    // 发布app版：(pc不用管)，需要修改为线上地址，不能使用代理地址；
    // baseURL: import.meta.env.MODE === 'development' ? '/apis' : 'http://localhost:3000'
})

Axios.interceptors.request.use(function(config: InternalAxiosRequestConfig){
    // debugger;
    config.headers.token = useUserStore().token;
    // authorization 是仿照上面token写的后端使用的都是authorization ，按照apipost 传输的格式则可以保证传输该值到headers上；芜湖！！！
    config.headers.Authorization ='bearer '+useUserStore().token
    console.log(config.headers,'注意看axios拦截的部分');
    console.log(config.headers.token,'1111111');
    
    return config; // 上面Axios封装了apis因此axios的apis需要删除，因此不担心失败；
    return Promise.resolve({code:200,message:'success'} as any) 
})
type Req ={
    url:string;
    data?:any;
    params?:any;
    method?:'POST' | 'DELETE' | 'PUT';
}
export default function ajax(req:Req):Promise<{code:number;message:string;data?:any;msg?:string}>{
    return new Promise(resolve=>{
        // 由于async + await只接收resolve
        Axios.request({
        url:req.url,
        // 查询参数使用paramas
        params:req.params || {},
        // 请求体参数使用data;
        data:req.data || {},
        // 如果req没有method属性则使用get方法；
        method:req.method || 'GET'
        }).then(d=>{
            resolve(d.data)
        }).catch(e=>{
            resolve(e)
        })
    })
}